[JBoss AS7 Development] - Hacking on AS7
by jaikiran pai
jaikiran pai [http://community.jboss.org/people/jaikiran] modified the document:
"Hacking on AS7"
To view the document, visit: http://community.jboss.org/docs/DOC-15596
--------------------------------------------------------------
h4. 1. Create a github account
http://github.com http://github.com
h4. 2. Fork jboss-as into your account
http://github.com/jbossas/jboss-as http://github.com/jbossas/jboss-as
h4. 3. Clone your newly forked copy onto your local workspace
$ git clone git@github.com:[your user]/jboss-as.git
Initialized empty Git repository in /devel/jboss-as/.git/
remote: Counting objects: 2444, done.
remote: Compressing objects: 100% (705/705), done.
remote: Total 2444 (delta 938), reused 2444 (delta 938)
Receiving objects: 100% (2444/2444), 1.71 MiB | 205 KiB/s, done.
Resolving deltas: 100% (938/938), done.
$ cd jboss-as
h4. 4. Add a remote ref to upstream, for pulling future updates
git remote add upstream git://github.com/jbossas/jboss-as.git
h4. 5. Use maven (via build.sh) (make sure you use maven 3)
$ ./build.sh install
.....
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] JBoss Application Server: BOM ..................... SUCCESS [1.834s]
[INFO] JBoss Application Server: Parent Aggregator ....... SUCCESS [0.022s]
[INFO] JBoss Application Server: Domain Core ............. SUCCESS [3.051s]
[INFO] JBoss Application Server: Server Manager .......... SUCCESS [0.204s]
[INFO] JBoss Application Server: Server .................. SUCCESS [0.283s]
[INFO] JBoss Application Server: Domain Controller ....... SUCCESS [0.084s]
[INFO] JBoss Application Server: Process Manager ......... SUCCESS [0.314s]
[INFO] JBoss Application Server: Remoting ................ SUCCESS [0.390s]
[INFO] JBoss Application Server: Build ................... SUCCESS [5.696s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
h4. 6. Pulling later updates from upstream
$ git pull --rebase upstream master
>From git://github.com/jbossas/jboss-as
* branch master -> FETCH_HEAD
Updating 3382570..1fa25df
Fast-forward
{parent => bom}/pom.xml | 70 ++++----------
build/pom.xml | 13 +--
domain/pom.xml | 10 ++
.../src/main/resources/examples/host-example.xml | 2 +-
.../resources/examples/jboss-domain-example.xml | 28 +++---
.../main/resources/schema/jboss-domain-common.xsd | 12 +--
.../main/resources/schema/jboss-domain-host.xsd | 2 +-
domain/src/main/resources/schema/jboss-domain.xsd | 17 ++--
pom.xml | 100 ++++++++++++++++++--
process-manager/pom.xml | 3 +-
10 files changed, 156 insertions(+), 101 deletions(-)
rename {parent => bom}/pom.xml (85%)
(--rebase will automatically move your local commits, if you have any, on top of the latest branch you pull from, you can leave it off if you do not). Please note that --rebase is very important if you do have commits. What happens is that when git pull can't fast forward, it does a merge commit, and a merge commit puts the sucked in changes ON TOP of yours whereas a rebase puts them BELOW yours. In other words a merge commit makes the history a graph, and we prefer a cleaner, easier to follow linear history (hence the rebasing). Further once you do a merge commit it will be difficult to rebase the history before that commit (say you want to combine two commits to one later) as described in point 12.
One way to not forget --rebase the rebase option is you may want to create an alias
$ git config --global alias.up "pull --rebase"
and then just use the new alias instead of pull
$ git up upstream master
One last option, which some prefer, is to avoid using pull altogether, and just use fetch + rebase (this is of course more typing)
h4. 7. Pushing pulled updates (or local commits if you aren't using topic branches) to your private github repo (origin)
$ git push
Counting objects: 192, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (44/44), done.
Writing objects: 100% (100/100), 10.67 KiB, done.
Total 100 (delta 47), reused 100 (delta 47)
To git@github.com:[your user]/jboss-as.git
3382570..1fa25df master -> master
You might need to say -f to force the changes. Read the note on 12 though before you do it.
h4. 8. Discuss your planned changes (if you want feedback)
* On the forums - http://community.jboss.org/en/jbossas/dev/jboss_as7_development http://community.jboss.org/en/jbossas/dev/jboss_as7_development
* On IRC - irc://irc.freenode.org/jboss-as7 or https://webchat.freenode.net/?channels=jboss-as7 (http://webchat.freenode.net/?channels=jboss-as7)
h4. 9. Make sure there is a JIRA somewhere for the enhancement/fix
http://jira.jboss.org http://jira.jboss.org
h4. 10. Create a simple topic branch to isolate that work (just a recommendation)
git checkout -b my_cool_feature
h6. Note: See tips section for how to use a nice git prompt for tracking what branch you are in!
h4. 11. Make the changes and commit one or more times (Don't forget to push)
git commit -m 'JBAS-XXXX Frunubucate the Fromungulator'
git commit -m 'JBAS-YYYY Tripple Performance of Fromungulation'
git push my_cool_feature
+Note that git push references the branch you are pushing and defaults to master, *not your working branch*.+
h4. 12. Rebase your branch against the latest master (applies your patches on top of master)
git fetch upstream
git rebase -i upstream/master
# if you have conflicts fix them and rerun rebase
# The -f, forces the push, alters history, see note below
git push -f origin my_cool_feature
The -i triggers an interactive update which also allows you to combine commits, alter commit messages etc. It's a good idea to make the commit log very nice for external consumption. Note that this alters history, which while great for making a clean patch, is unfriendly to anyone who has forked your branch. Therefore you want to make sure that you either work in a branch that you don't share, or if you do share it, tell them you are about to revise the branch history (and thus, they will then need to rebase on top of your branch once you push it out).
h4. 13. Get your changes merged into upstream
1. Make sure your repo is in sync with other unrelated changes in upstream before requesting your changes be merged into upstream by repeating step 12.
2. Email a pull request to mailto:jbossas-pull-requests@lists.jboss.org jbossas-pull-requests(a)lists.jboss.org (if I haven't subscribed the list, do it https://lists.jboss.org/mailman/listinfo/jbossas-pull-requests here) with a link to your repo, a description of the changes, and who reviewed (if any)
3. After review a maintainer will merge your patch, update/resolve issues by request, and reply when complete
4. Don't forget to switch back to master and pull the updates1. git checkout master
git pull upstream master
h4. Appendix A. Adding a new external dependency
1. Edit pom.xml and add a property of the form "version.groupId.artifactId" which contains the Maven version of the dependency. Add your dependency to the <dependencyManagement> section, and use the property for the version. If your new dependency has any transitive dependencies, be sure to <exclude> them (or if possible, update the project so that all its dependencies are of *provided* scope).
2. Add your dependency to any AS modules that require it, but only with group/artifact.
3. Edit build/pom.xml and add your dependency with only group/artifact.
4. Create a directory in build/src/modules corresponding to the *module's* name (which will differ from the Maven group/artifact name; look at other modules to get a feel for the naming scheme), with a version of "main", like this: "build/src/modules/org/jboss/foo/main".
5. Create a module.xml file inside the "main" directory. Use a module.xml from another similar module as a template.
6. Edit build/build.xml and add a <module-def> element. The name listed in the <module-def> element corresponds to the *module* name. The group/artifact listed in the nested maven-resource element(s) refer to the *Maven* group/artifact name.
7. *Important:* Make sure you did not introduce any transitive dependencies by using "mvn dependency:tree". If you did, be sure to add <exclusion>s for each of them to your dependency as described above.
8. *Important:* Do *not* introduce a dependecy on the "*system*" module. If you need access to JDK classes which are not covered by any other dependency, use the "javax.api" module as a dependency.
Please be sure to preserve the alphabetical ordering of all POMs and the build.xml file.
h4. Appendix B. Adding a new AS submodule
1. Create the directory corresponding to the submodule and add it to the root pom.xml file. The convention is to leave off the "jboss-as-" portion, so "jboss-as-remoting" becomes "remoting".
2. Create a POM for your submodule (use another submodule as a template). Make sure all dependencies you specify do *not* include a version. The group ID should be "org.jboss.as", and the artifact ID should begin with "jboss-as-" and there should be a proper <name> for the new module.
3. Add the new submodule to the top section of the <dependencyManagement> of the top-level pom.xml. The version should be set to "${project.version}". This section is sorted alphabetically by artifact name so please preserve that ordering.
4. Add the new submodule to the modules section element of the top-level pom.xml
5. Add your submodule dependency to any AS modules that require it, but only with group/artifact.
6. Edit build/pom.xml and add the new submodule with only group/artifact.
7. Create a directory in build/src/modules corresponding to the submodule, with a version of "main", like this: "build/src/main/resources/modules/org/jboss/as/new-subsystem/main".
8. Create a module.xml file inside the "main" directory. Use a module.xml from another subsystem as a template.
9. Edit build/build.xml and add a <module-def> element for the subsystem. Use the module name and Maven coordinates from steps 6 and 2 respectively. Use another submodule as a template.
Please be sure to preserve the alphabetical ordering of all POMs and the build.xml file.
h4. Appendix C. Profiling with JProfiler
Performance tuning is an important part of AS7 development. In order to use JProfiler on a standalone AS 7 instance, first you need to add the following to your standalone.conf file:
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=com.jprofiler -agentlib:jprofilerti -Xbootclasspath/a:/path/to/jprofiler/bin/agent.jar"
The "jboss.modules.system.pkgs" property tells JBoss Modules to allow the "com.profiler" classes to be found from any class loader, which is essential to allow the JProfiler agent to run.
It's easiest to then just set up your JProfiler session as "Remote", and start the server and the profiler in any order. That's it!
h4. Appendix D. Importing into Eclipse
The directory "ide-configs/eclipse" contains both formatter and code templates. Use these to pass the CheckStyle enforcer during the build if coding from Eclipse.
h4. Tips & Tricks!
h4. Creating a Git status prompt in your terminal
This makes it easy to not forget what branch you are working in and quickly tell if you have changes. The following will adjust the PS1 on unix (or cygwin on Windows). Note that it assumes a compiled version of git, which is also the case for the OSX packages. If you are using the bundled rpm version, change the completion path to "/etc/bash_completion.d/git"
GIT_COMPLETION_PATH="/usr/local/git/contrib/completion/git-completion.bash"
if [ -f "$GIT_COMPLETION_PATH" ]; then
GIT_PS1_SHOWDIRTYSTATE=true
. "$GIT_COMPLETION_PATH"
ADD_PS1='$(__git_ps1)'
fi
if [[ ${EUID} == 0 ]] ; then
PS1="\[\033[01;31m\]\h\[\033[01;34m\] \w\[\033[33m\]$ADD_PS1\[\033[34m\] \$\[\033[00m\] "
else
PS1="\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[33m\]$ADD_PS1\[\033[34m\] \$\[\033[00m\] "
fi
h4. IDE Integration
h5. Eclipse
Follow the steps mentioned here http://community.jboss.org/docs/DOC-16718 http://community.jboss.org/wiki/HackingAS7usingEclipse
--------------------------------------------------------------
Comment by going to Community
[http://community.jboss.org/docs/DOC-15596]
Create a new document in JBoss AS7 Development at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=102&co...]
11 years, 9 months
[IronJacamar Development] - IronJacamar Management
by Jesper Pedersen
Jesper Pedersen [http://community.jboss.org/people/jesper.pedersen] modified the document:
"IronJacamar Management"
To view the document, visit: http://community.jboss.org/docs/DOC-16674
--------------------------------------------------------------
h1. IronJacamar management
The goal of this page is to describe the management features of the IronJacamar container, the design and key implementation classes.
*
#IronJacamar_management IronJacamar management
**
#Requirements Requirements
**
#Design Design
***
#ManagementRepository ManagementRepository
***
#Connector Connector
***
#Resource_Adapter Resource Adapter
***
#Connection_Factory Connection Factory
***
#ManagedConnectionFactory ManagedConnectionFactory
***
#AdminObject AdminObject
***
#ConfigProperty ConfigProperty
***
#DataSource DataSource
**
#Features Features
***
#Operations Operations
****
#PoolConfiguration PoolConfiguration
***
#Statistics Statistics
**
#Implementation Implementation
***
#Operations_709067 Operations
****
#PoolConfiguration_512379 PoolConfiguration
***
#Statistics_528121 Statistics
****
#PoolStatistics PoolStatistics
**
#Test_suite Test suite
**
#JDBC JDBC
**
#Related Related
h2. Requirements
The overall requirements are
* Show the configuration of deployed resource adapters and datasources
* Show statistics for resource adapters and datasources
* Apply changes to the configuration of deployed resource adapters and datasources
* Invoke operations on the deployed resource adapters and datasources
h2. Design
We should a central place where the management view of resource adapters and datasources are registered (ManagementRepository).
This repository provides access to classes (Connector / DataSource) that represent a single deployment of either a resource adapter or a datasource.
Each of these classes are split into a hierarchy where information about the deployment and references to the live objects are maintained. It must be a design goal that the management classes uses methods from the public API of the IronJacamar container.
ManagementRepository
|
|- Connector
| |
| |- Resource Adapter
| |
| |- Connection Factories
| |
| |- Admin Objects
|
|- DataSource
See a description of each class below.
The implementation must be pure POJO, and only depend on the IronJacamar container.
Clients of the management repository contains the management specific technology, such as
* Java Management Extensions (JMX)
* JBoss Application Server 7 domain model
* RHQ
That way we can provide an API that can be used from all client types.
h3. ManagementRepository
|| *Method
* || *Description* ||
| getConnectors() | The active resource adapters |
| getDataSources() | The active datasources |
h3. Connector
|| *Method
* || *Description* ||
| getUniqueId() | The unique identifier for the deployment |
| getResourceAdapter() | The resource adapter |
| getConnectionFactories() | The connection factories |
| getAdminObjects() | The admin objects |
h3. Resource Adapter
|| *Method
* || *Description
* ||
| getResourceAdapter() | A reference to the live object |
| getConfigProperties() | The config-property's for the resource adapter |
| getStatistics() | A reference to the statistics module for the resource adapter |
h3. Connection Factory
|| *Method
* || *Description
* ||
| getJndiName() | The JNDI name of the connection factory |
| getConnectionFactory() | A reference to the connection factory |
| getManagedConnectionFactory() | A reference to the managed connection factory |
| getPool() | A reference to the pool |
| getPoolConfiguration() | A reference to the pool configuration |
h3. ManagedConnectionFactory
|| *Method
* || *Description* ||
| getManagedConnectionFactory() | A reference to the live object |
| getConfigProperties() | The config-property's for the managed connection factory |
| getStatistics() | A reference to the statistics module for the managed connection factory |
h3. AdminObject
|| *Method
* || *Description
* ||
| getJndiName() | The JNDI name for the admin object |
| getAdminObject() | A reference to the live object |
| getConfigProperties() | The config-property's for the admin object |
| getStatistics() | A reference to the statistics module for the admin object |
h3. ConfigProperty
|| *Method
* || *Description
* ||
| getName() | The name of the config-property |
| isDynamic() | Is the config-property dynamic - e.g. supports live updates |
| isConfidential() | Is the config-property confidential |
h3. DataSource
|| *Method
* || *Description* ||
| getJndiName() | The JNDI name of the datasource |
| isXA() | Is the datasource XA capable |
| getPool() | A reference to the pool |
| getPoolConfiguration() | A reference to the pool configuration |
h2. Features
TBD
h3. Operations
Description of the operations that can be invoked are listed below.
* "Per request" -- Once an update has been performed it will be used at the next invocation of a method which uses the property in question
* "Per container" -- Is applied once a container is started/restarted
h4. PoolConfiguration
|| *Property
* || *Read* || *Write* || *Applied* ||
| MinSize | Y | Y | Per request |
| MaxSize | Y | Y | Per request |
| BlockingTimeout | Y | Y | Per request |
| IdleTimeout | Y | Y | Per container |
| BackgroundValidation | Y | Y | Per container |
| BackgroundValidationMinutes | Y | Y | Per container |
| Prefill | Y | Y | Per container |
| StrictMin | Y | Y | Per request |
| UseFastFail | Y | Y | Per request |
h3. Statistics
Statistics should be handled through an SPI using the following two interfaces
org.jboss.jca.core.spi.statistics.Statistics
org.jboss.jca.core.spi.statistics.StatisticsPlugin
The "Statistics" interface identifies that the component in question supports statistics. The "StatisticsPlugin" interface defines the contract for the statistics module.
h2. Implementation
The implementation is located in the core module of the IronJacamar repository. The package is
org.jboss.jca.core.api.management
The implementing classes must use java.lang.ref.WeakReference for all live object references, such that won't prevent a garbage collection of the object in question.
h3. Operations
h4. PoolConfiguration
Access can be done directly on the reference.
h3. Statistics
It is possible to enable/disable statistics collection, as well as clear current values.
All statistics are read-only.
h4. PoolStatistics
|| *Property
* || *Description* ||
| ActiveCount | The active count |
| AverageBlockingTime | The average time spent blocking on a connection |
| AverageCreationTime | The average time spent on creating a physical connection |
| CreatedCount | The created count |
| DestroyedCount | The destroyed count |
| MaxCreationTime | The maximum time spent on creating a physical connection |
| MaxUsedCount | The maximum number of connections used |
| MaxWaitTime | The maximum time waiting for a connection |
| TimedOut | The timed out connections |
| TotalBlockingTime | The total time spent blocking for connections |
| TotalCreationTime | The total time spent creating physical connections |
h2. Test suite
The management model is currently tested through the RHQ plugin.
h2. JDBC
The JDBC resource adapter has the following statistics exposed
|| *Statistics
* || *Description* ||
| PreparedStatementCacheAccessCount | The number of times that the statement cache was accessed |
| PreparedStatementCacheAddCount | The number of statements added to the statement cache |
| PreparedStatementCacheCurrentSize | The number of prepared and callable statements currently cached in the statement cache |
| PreparedStatementCacheDeleteCount | The number of statements discarded from the cache |
| PreparedStatementCacheHitCount | The number of times that statements from the cache were used |
| PreparedStatementCacheMissCount | The number of times that a statement request could not be satisfied with a statement from the cache |
h2. Related
* JBoss Application Server 7
* http://community.jboss.org/docs/DOC-16378 RHQ platform
--------------------------------------------------------------
Comment by going to Community
[http://community.jboss.org/docs/DOC-16674]
Create a new document in IronJacamar Development at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=102&co...]
11 years, 9 months
[JBoss Portal Development] - Upgrading from EPP 4.2.3 to 5.1.0 Questions
by The Helper
The Helper [http://community.jboss.org/people/helpertoo] created the discussion
"Upgrading from EPP 4.2.3 to 5.1.0 Questions"
To view the discussion, visit: http://community.jboss.org/message/599481#599481
--------------------------------------------------------------
<! --http://community.jboss.org/message/599481#599481 Upgrading from EPP 4.2.3 to 5.1.0 Questions><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><! --http://community.jboss.org/message/599481#599481 Upgrading from EPP 4.2.3 to 5.1.0 Questions><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]><mce:style><! /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} --><!--[endif] -->
I am not sure that this is the appropriate location for this post, but hey... if I am wrong, I am sure the experts will help me get on track.
We are in the process of evaluating the jump to 5.1.0 from 4.2.3 and notice many disturbing issues. Yes, it appears that 5.1.0 allows for greater flexibility and JSR268, but is the additional features really worth all the effort of completely having to launch a new application? I ask because I do not see where there is any mythology to upgrade.
--------------------------------------------------------------
Reply to this message by going to Community
[http://community.jboss.org/message/599481#599481]
Start a new discussion in JBoss Portal Development at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&cont...]
11 years, 9 months