Developing in CAS

advertisement
Developing CAS in Eclipse
Edit and Debug
Maven is Best Practice
• Compile and Zip WAR file with Maven 2
– Manage “dependencies” (external JARs from other
software libraries or products)
– Run tests to validate each change cycle
– Build JAR, WAR, or other standard “artifacts”
• Edit with Eclipse
– Syntax and help for Java and XML
– Widely used, modularly extensible IDE
• How about simple testing with Eclipse?
Maven Compile
Main POM
Core project
source + POM
Option project
source + POM
Option project
source + POM
Option project
source + POM
artifact jar
artifact jar
artifact jar
artifact jar
Top level Maven POM
optional projects are compiled
<modules>
<module>cas-server-core</module>
<module>cas-server-support-generic</module>
<module>cas-server-support-jdbc</module>
<module>cas-server-support-ldap</module>
<module>cas-server-support-openid</module>
<module>cas-server-support-radius</module>
<module>cas-server-support-spnego</module>
<module>cas-server-support-trusted</module>
<module>cas-server-support-x509</module>
<module>cas-server-integration-jboss</module>
<module>cas-server-webapp</module>
</modules>
Options
Java Subproject POM
<artifactId>cas-server-support-trusted</artifactId>
<packaging>jar</packaging>
<dependencies>
Generated result
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
JAR for Compile
<groupId>cas</groupId>
<artifactId>casclient</artifactId>
<version>2.1.1</version>
</dependency>
Maven build WAR
Main POM
artifact jar
artifact jar
artifact jar
artifact jar
cas.war
webapp
HTML + POM
WEB-INF/lib
cas-server-webapp/pom.xml
core required, add option JARs
<dependency>
Default is core only
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-core</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
Add
<artifactId>cas-server-support-trusted</artifactId>
option
<version>${project.version}</version>
artifacts
</dependency>
you choose
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-support-x509</artifactId>
<version>${project.version}</version>
</dependency>
Eclipse “workspace”, CAS “project”
Maven projects
{$home}/workspace
CAS3xx [Eclipse project]
Main POM
subproject
subproject
subproject
Assume You Know How
• Install current Java
• Install Apache Tomcat
• Install and use Maven 2.0.9
Because this is all part of the standard CAS development instructions.
Fork In the Road
Eclipse Web Standard Tools
MyEclipse
•
•
•
•
•
• $31.75 /year
• Genuitec.com
• Includes WST, plus Spring,
WS, Hibernate, JPA, …
• A particular group of plugins
have been integrated
Free
Part of Eclipse project
Open source
New release each June
Independent plugins don’t
work smoothly together
WST Debugging
Eclipse
CAS
classes
Web
project
Tomcat
directory
Servers
/conf
Tomcat process
MyEclipse
Eclipse
CAS Project
Java Source
Tomcat, JBoss, …
/webapps or
/deploy
WebContent
WEB-INF/classes
By any other Name
• A “project” in Eclipse or Maven is a directory
with source subdirectories that can be
compiled to produce a JAR file or zipped up to
produce a WAR file
• A “Java Project” has source to compile. It can
produce a program or a JAR library.
• A “static Web project” is a bunch of HTML,
CSS, and image files that you can deploy to
any Web Server. It has no Java.
By Any Other Name
• A “dynamic Web application project” has a
WEB-INF subdirectory with a web.xml file
• A “WAR file” is a zipped up copy of the
dynamic Web application, but the unzipped
directory is also sometimes called a WAR too.
• A “context” is the runtime environment
created by the Web server to run the code in a
dynamic Web application
Ganymede WST
• Dynamic Web projects can only be created
empty. A Java SE project cannot be converted
into a dynamic Web project. The JA-SIG CAS
source is an ordinary Java SE source project.
• Create an empty dynamic Web project. Copy
the cas-server-webapp contents. Configure
the CAS project as a “library module” for the
Web project . Finally, copy external JAR
dependencies into the WEB-INF/lib.
WST Runtime Magic
• <Context docBase="casx" path="/casx“
source="org.eclipse.jst.jee.server:casx"/>
• Get files from the dynamic Web project dir.
• Get classes from the CAS compiler output
directory.
• No support for Maven dependencies.
Create WST project
Eclipse
Library Project
(CAS source)
new dynamic Web proj
copy from cas-server-webapp project
the src/main/webapp files and
target/cas-server-webapp-3.3/WEB-INF/lib jars
dynamic web
project (WAR)
Server
Tomcat
directory
Tomcat
/conf
MyEclipse
• Good News: MyEclipse can add “dynamic Web
application” behavior to an existing Java (SE)
project.
• Bad News: MyEclipse uses the WEBINF/classes directory as a build work area, so
the WebContent directory can’t be in casserver-webapp
• Copy cas-server-webapp source to an new
WebContent directory
MyEclipse Deployment
• Web application is copied to the real external
{tomcat}/webapps directory and the real
external server configuration is started
• Tomcat runs with normal environment, under
with Eclipse debugging
• Any problems can be fixed by standard Tomcat
documentation and configuration
• Application can also run under Tomcat
without Eclipse
Download Ganymede EE
from www.eclipse.org/downloads
Download MyEclipse 7.0
(M2 or later)
Common Steps
Add update sites
Help – Software Updates – Available Software
Subversion
Windows-only
Native Java 1.5 HL
1.5 HL Win32
binaries
Eclipse
Subversion
Team
Provider
Polarion
Subversive
SVN
Connectors
Unix or Windows
SVNKit 1.2.0
SVN Repository Exploring
Checkout
• JA-SIG source repository
looks like a tree of
projects
• Select the trunk or a
tagged release and
check out as a Java (SE)
project
Update Dependencies
Maven: cas-server-core is a “project”
Eclipse: cas-server-core/src/main/java is a “src dir”
Build Path (GUI to .classpath)
Build Path (GUI to .classpath)
Package Explorer - Libraries
WST in Ganymede EE
WST New Dynamic Web Project
New Dynamic Web Project Wizard
Cut and Paste
• Copy (cut and paste) the Web application files
(cas-server-webapp/src/main/webapp/*)
from the CAS source project to the
WebContent directory of the new dynamic
Web project
• Click OK to replace the generated web.xml file
in WEB-INF
WST Java EE Module Dependencies
Get the POM dependencies
• “cd” to Workspace, CAS source project
directory
• run “mvn install” command
• Refresh the Eclipse view of the project.
• Go to cas-server-webapp/target/cas-serverwebapp-3.3/WEB-INF/lib
• Copy all the external JAR files (exclude the casserver-*.jar files) to the WEB-INF/lib of the
new dynamic Web project
Validation
• WST has validators for HTML, XML, etc.
• Some CAS source files fail validation (headers,
footers, etc.)
• In WST, only option is to disable validation for
the entire project.
MyEclipse
Add Web Project Capabilities
to existing CAS project
MyEclipse Wizard
Adding Web capabilities
• MyEclipse changes the default compiler output
directory to WebContent/WEB-INF/classes
• MyEclipse adds its editors and syntax filters to the
project
• MyEclipse adds the J2EE (1.4 or 5) package of
libraries to the compiler classpath
• There are now HTML and XML files with “errors”.
[Right click the directories, select MyEclipse,
Exclude from Validation]
J2EE 1.4 Libraries
Sanity Check
• cas-server-webapp
– will be used as the source for Maven
– should reflect your production environment
(probably on another host)
– is associated through SVN to the ja-sig source
• WebContent
– used by Eclipse (tell SVN to ignore it)
– reflects your local test Tomcat environment
WEB-INF/classes
• Source directories are compiled and classes
are stored here
• Data files (resources) are copied here
• add “cas-server-webapp/src/main/webapp/
WEB-INF/classes” as a MyEclipse “source”
directory to get *.properties files
• Put JUnit class files someplace else (/test-bin)
Select one or more J2EE App Servers
Exploded deployments are changed “on the fly” after save and compile.
Application Server Buttons
Manually
redeploy
Run
Application Server
(Tomcat)
Start the Server
Download