Seam 3 – creating a new project – with and without Seam Forge

Hi all!

[Note – Before reading this tutorial, would be nice if you read this post before – It tells you that these Seam posts are under incremental builds and are modified everyday]

This is the first post about Seam 3 examples!

The main point here is not to show a simple ‘Hello World’ app, but a more complex example, showing resources from 2 or more more modules.

So, let me tell you a short story…

Ben is a computer science student and he’s having some java classes. The subject now is web apps using Java.

– So – the teacher starts to talk – creating a java web app is pretty simple. As you can see, the only thing you have to do is open Eclipse, select ‘Dynamic web module’….. – and then he starts to say lots of things that should be done BEFORE start writing code.

[After 15 min talking, the teacher still explaining how to create a project] – And this is web.xml. And this one is faces-config.xml, and this is context.xml. Using Jboss AS 5 has some more extra confs, and with JEE 5, you just have to…

Ben thinks “OMG, NO WAY, THIS IS NOT SIMPLE!!!! HOW CAN YOU LIVE WITH THAT??”

And Ben is right, developing apps in that way is pretty boring, painful, and creates a false idea that “Java is a DSL for taking large XML files and converting them to stack traces“.

“I will never use this thing called ‘Java’ to develop my web apps. Ruby on Rails is much more simple and fast”, Ben says leaving the classroom after the class.

“The problem is that the teacher did not mention anything about JEE 6” – replied his classmate Susan.

– JEE 6? What does it do, take large JSON files and convert then to stack traces? haha.

– No, JEE gives you the power of CDI! – says Susan.

– I’ll just consider using it if you tell me that I can build Java web apps in a way as simple as Rails. Otherwise…

– Yes, YOU CAN DO IT! Let me introduce you to Seam Forge!

Ben still thinks that Susan is mocking him, but then she takes her MacBook and starts a little and fast class about Seam Forge.

– Let me introduce you to Seam Forge. Believe me, the only sad part of Java story is Maven downloading the internet for you if your .m2/repository is empty. There’s any other boring thing.

*****************************************

Seam Forge – Fast tutorial

“Ok”, you might be thinking after reading this story. “Show me what do I need to have Seam Forge up and running here on my computer.

Obviously you need JDK (6+). You can download Seam Forge here – go to the “artifact information” and download the zip file. After that, unzip it, and add $FORGE_HOME/bin to your path.

If you are into a UNIX based system (Linux or Mac), basically just add this to your .bash_profile or .basrc:

export FORGE_HOME=/{YOUR_LOCATION}/forge-1.0.0-SNAPSHOT
export FORGE=$FORGE_HOME/bin
export PATH=$PATH:$FORGE

change {YOUR_LOCATION} to the right path of seam-forge directory.

So now type forge into your terminal. You might see Seam Forge up and running, like this:

Explore some commands by typing list-commands -all. Remember that TAB key works pretty fine here ūüôā

So now what about some ‘rails style’ development? Let’s do some scaffolding.

Be sure to have JBoss AS 6 or JBoss AS 7 downloaded. You should also have Maven and Git installed.

  1. Let’s create new sample project. Type¬†new-project –named damnPonies –topLevelPackage com.ponies.damn –projectFolder /{YOUR_PATH_HERE/ ¬†
  2. Now let’s do scaffold setup. type scaffold setup. Forge will ask you some questions, answer yes.
  3. Choose the last version of Metawidget, and also choose the latest version of Seam persistence. Done!
  4. Now create an index – scaffold indexes –overwrite
  5. Setup your persistence – type ¬†– You can change provider and container – Just use TAB to see other options ūüôā
  6. Now let’s create an entity. Type¬†entity –named Pony. Check that Forge creates an Entity called Pony for you (Very similar to Rails =] )
  7. Let’s add some fields – type field string –named color
  8. Type ls and examine the class Pony.java 
  9. Type scaffold from-entity to generate a scaffold for Pony entity.
  10. Then, type build to make maven build the project for you. 
  11. Done! Take a look at the project structure 

If you ever used Seam 2, maybe Forge reminds you a seam-gen enhanced version.

[Break time – You might be wondering why did I call this project ‘DamnPonies. Its related to a Brazilian tv commercial which has an annoying song that involves ‘Damn Ponies’. You can check it ¬†here ¬†– CAUTION – Really annoying song]

More information about Seam Forge:

http://seamframework.org/Seam3/Tooling

https://docs.jboss.org/author/display/SEAMFORGE/Home

*****************************************

Now let’s go back to our story. While Ben is learning about Seam Forge, his classmate Henry is at the library doing some research work. Henry is a Java enthusiastic boy, who really likes Maven world. He gets mad when people make fun of Maven saying it downloads the whole internet. Last week he read a tweet from Susan saying “Maaaaavvveeennn IIIII hhhaaaattteee yyyooouuuuu!”, and then he tweeted back – “go back to Ant then!”. Susan provoked back – “You keep saying you love Maven, but I never see you configure a new project from the beginning. You always use a tool or a stable Maven Archetype. Loser”.

Henry got really disappointed by hearing this from a girl, so he decided to turn the tide. He wants to prove her that HE CAN CREATE A SEAM 3 PROJECT WITHOUT SEAM FORGE. “I’ll curse her with Maven. She’ll see that I am the Maven guy.”

So let’s help Henry on his adventure to create a Seam 3 project without using Seam Forge.

[TODO – write about seam 3 architecture + module brief]

I will assume that you already know about Seam 3 modular architecture. If not, take a look here. Also, you will need Maven 3 and JDK 6+.

So, first step – start with weld archetype – Open your Terminal and type

mvn archetype:generate -DarchetypeArtifactId=jboss-javaee6-webapp -DarchetypeGroupId=org.jboss.weld.archetypes -DarchetypeVersion=1.0.1.CR1 -DarchetypeRepository=central

[TODO – write a better tutorial for this]

Advertisements

August 6, 2011 at 3:19 pm 14 comments

Seam 3 tutorials and examples – up and running

Hi all!

I know that you have been looking for Seam 3 tutorials, examples, and it’s a little hard to find it yet. But Seam 3 team is working hard and soon there will be lots of thing for the community. I will help them with some tutorials and exmaples.

I am going to publish lots of posts and update them [almost] everyday. So, if Google shows you a page of this blog one day, probably in the next 2 or 3 days there will be new content at the same page. Be sure to remember that, otherwise you will think “OMG, its missing lots of things in this post. It’s a crap”. It’s Aug 06 today – I really expect to finish solid information and very cool tutorials until the end of the month.

I also would like to thank all of you who send me feedbacks about this blog – it’s very important to me to always try to write better and useful things. So, if you get a free time, write a little review and send it to hannelita @ gmail, or just leave a comment here ūüôā Believe me, it’s very important to me.

Also, I’d like to ask you to be patient. I know all of you want information, tutorials, easy-to-read and lots of other things. But be aware this is community work – I also have to do lots of other things. I’m really glad to help and share knowledge, but sometimes its really hard to create content in one night. I sleep (sometimes). ūüôā Not only me, but Red Hat guys and all of the other Seam contributors have tons of things to do! Think about that before saying bad things. But we really welcome to suggestions, questions, and specially new contributors! Remember – you can access the forum anytime and post your questions, or join us at IRC – irc.freenode.net – #seam and #seam-dev channel. There’s [almost] always someone online there that might help you!

Feel free to email me anytime – hannelita @ gmail, or send me a Tweet @hannelita. Thanks for reading!

August 6, 2011 at 2:42 pm 1 comment

Seam Hack Night – August 11!

Hi all!

On the next August 11 at 22:00 UTC * there will be another round of Seam Hack Night! This time for Seam Security module!
Fork the code and join #seam-dev channel at irc.freenode.net !
This is a great opportunity to help a community project to improve its code! There’s a lot of work to do, so instead of just using the framework, why you don’t help to fix some bugs? Let’s go OSS spirit ūüôā
If you don’t know much about Seam 3 project, a good way to start is to take a look here, and do some forks of the modules following these instructions.
If you are not familiar with git or have some questions about how to obtain the source code, or about Maven, you can leave a comment here or send me an email ūüôā
So, don’t forget!

August 11

#seam-dev  irc.freenode.net

Security module – github page

*You can check your timezone here

July 28, 2011 at 3:57 am Leave a comment

jbpm + Seam 3 + JBoss AS 7 => Yes, Solved!

Hi, all!!

Some of you emailed me saying that it was impossible to have jbpm + Seam 3 + JBoss AS 7 up and running. And yes, I have been trying to deploy an application with this death combo and have been experienced some problems.
First of all, I entered #seam-dev IRC chat, and found out that I should use version¬†3.0.1-SNAPSHOT for Seam modules (in case, I had to adopt this version for persistence, config and faces module).¬†3.0.1-SNAPSHOT¬†really solved lots of problems, BUT I still got some weird persistence problems when I deployed the application. Obviously I thought they were related to persistence module, but no, it was Security module that is unstable until the release of this post. So, I prefer to remove Security module for while, I did not have time to see how could I hack it. Well, everything should work by now, but… No. I started having weird problems with faces-config.xml – JBoss log accused some exceptions telling me something like that:
18:06:56,635 INFO¬† [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-5) Unsanitized stacktrace from failed start…: java.lang.UnsupportedOperationException
     at javax.faces.application.Application.getResourceHandler(Application.java:287) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at javax.faces.application.ApplicationWrapper.getResourceHandler(ApplicationWrapper.java:506) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at org.jboss.seam.faces.environment.SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.getResourceHandler(SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.java) [seam-faces-3.1.0-20110720.041339-24.jar:]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.setResourceHandler(ApplicationConfigProcessor.java:752) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.process(ApplicationConfigProcessor.java:310) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:116) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:216) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:339) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:226) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3368) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:3821) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
     at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
     at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
18:06:56,637 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-5) Critical error during deployment: : com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! null
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:358) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:226) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3368) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:3821) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
     at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
     at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
Caused by: java.lang.UnsupportedOperationException
     at javax.faces.application.Application.getResourceHandler(Application.java:287) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at javax.faces.application.ApplicationWrapper.getResourceHandler(ApplicationWrapper.java:506) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at org.jboss.seam.faces.environment.SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.getResourceHandler(SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.java) [seam-faces-3.1.0-20110720.041339-24.jar:]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.setResourceHandler(ApplicationConfigProcessor.java:752) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.process(ApplicationConfigProcessor.java:310) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:116) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:216) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:339) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
¬†¬†¬†¬† … 9 more
18:06:56,639 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/ui]] (MSC service thread 1-5) Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! null
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:294) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3368) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:3821) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
     at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
     at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
Caused by: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! null
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:358) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:226) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
¬†¬†¬†¬† … 8 more
Caused by: java.lang.UnsupportedOperationException
     at javax.faces.application.Application.getResourceHandler(Application.java:287) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at javax.faces.application.ApplicationWrapper.getResourceHandler(ApplicationWrapper.java:506) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at org.jboss.seam.faces.environment.SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.getResourceHandler(SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.java) [seam-faces-3.1.0-20110720.041339-24.jar:]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.setResourceHandler(ApplicationConfigProcessor.java:752) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.process(ApplicationConfigProcessor.java:310) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:116) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:216) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:339) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
¬†¬†¬†¬† … 9 more
18:06:56,641 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-5) Error listenerStart
18:06:56,641 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-5) Context [/ui] startup failed due to previous errors
18:06:56,642 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-5) Unexpected exception when attempting to tear down the Mojarra runtime: java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.application.ApplicationFactory
     at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:804) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:306) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:108) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:327) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3465) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.stop(StandardContext.java:3970) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:3888) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
     at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
     at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
18:06:56,646 INFO  [org.jboss.web] (MSC service thread 1-5) registering web context: /ui
18:06:56,647 INFO¬† [org.jboss.as] (MSC service thread 1-5) JBoss AS 7.0.0.Final “Lightning” started in 22974ms – Started 485 of 544 services (59 services are passive or on-demand)
Wow, really weird. Removing Seam Faces module seems to solve the problem. LOL, obviously I couldn’t remove it. So, there should be some dependency screwing up my project. After 3 days looking for that, I found out what was it. As the title of the post says, this project uses jbpm, and one of jbpm modules is the human-tasks modules, which… Has a seam 2 lib as one of its dependencies. Yep, thats true, so Seam 2 crashes with Seam 3 causing lots of weird exceptions…
So i just removed the Seam 2 dependency adding a <exclusion> block at my pom.xml:

<exclusion>

<groupId>org.jboss.seam</groupId>

<artifactId>jboss-seam</artifactId>

</exclusion>
 (add this into the jar that depends on jbpm human-task module)
Then, just put Seam faces module back. Everything sould work fine ūüôā

July 27, 2011 at 6:36 pm 2 comments

jbpm5 and Jboss AS 7 – little issue

Hi, all!

Recently I tried to deploy a web application in JBoss AS 7 that contains some jbpm 5 dependencies on its pom.xml.
Unfortunately I got stucked into a weird error – “Deployment of “ui.war” was rolled back with failure message {“Services with missing/unavailable dependencies” => [“jboss.persistenceunit.\”ui.war#org.jbpm.task\” missing [ jboss.data-source.java:/ ]”]” [see the image below]:

So, as I was a jbpm newbie, I decided to take a look at docs to try to answers some questions about this, after taking some time asking my self “Y U NO WORK?”
The problem is that the dependency

<groupId>org.jbpm</groupId></pre>
<artifactId>jbpm-human-task</artifactId>

contains a persistence.xml file with this content:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence version="1.0"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                                 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
                                 http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
             xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://java.sun.com/xml/ns/persistence">
  <persistence-unit name="org.jbpm.task">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>org.jbpm.task.Attachment</class>
    <class>org.jbpm.task.Content</class>
    <class>org.jbpm.task.BooleanExpression</class>
    <class>org.jbpm.task.Comment</class>
    <class>org.jbpm.task.Deadline</class>
    <class>org.jbpm.task.Comment</class>
    <class>org.jbpm.task.Deadline</class>
    <class>org.jbpm.task.Delegation</class>
    <class>org.jbpm.task.Escalation</class>
    <class>org.jbpm.task.Group</class>
    <class>org.jbpm.task.I18NText</class>
    <class>org.jbpm.task.Notification</class>
    <class>org.jbpm.task.EmailNotification</class>
    <class>org.jbpm.task.EmailNotificationHeader</class>
    <class>org.jbpm.task.PeopleAssignments</class>
    <class>org.jbpm.task.Reassignment</class>
    <class>org.jbpm.task.Status</class>
    <class>org.jbpm.task.Task</class>
    <class>org.jbpm.task.TaskData</class>
    <class>org.jbpm.task.SubTasksStrategy</class>
    <class>org.jbpm.task.OnParentAbortAllSubTasksEndStrategy</class>
    <class>org.jbpm.task.OnAllSubTasksEndParentEndStrategy</class>
    <class>org.jbpm.task.User</class>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
      <property name="hibernate.connection.driver_class" value="org.h2.Driver"/>
      <property name="hibernate.connection.url" value="jdbc:h2:mem:mydb" />
      <property name="hibernate.connection.username" value="sa"/>
      <property name="hibernate.connection.password" value="sasa"/>
      <property name="hibernate.connection.autocommit" value="false" />
      <property name="hibernate.max_fetch_depth" value="3"/>
      <property name="hibernate.hbm2ddl.auto" value="create" />
      <property name="hibernate.show_sql" value="false" />
    </properties>
  </persistence-unit>
</persistence> 
AS 7 gets crazy about it because it reads this file from jbpm-human-task jar and cannot find the <jta-data-source> tag! Even if you create a new persistence.xml file containing this persistence unit and try to point a jta-data-source, it will not work, because JBoss AS still reads this persistence inside this jar!
After I realized that, I found some bug reports (here and here) talking about similar issues.
For while I dont think there’s a fix for that. If you want to test you application without jbpm-human-task features, I suggest you to add this lines of exclusion into your pom.xml:
<exclusions><exclusion>

<groupId>org.jbpm</groupId>

<artifactId>jbpm-human-task</artifactId>

</exclusion>

</exclusions>

Edited: Sures, removing the module is the worst solution in the world. I just blogged to show you where the problem was. I suggest you clone jbpm project at github (you will have to clone Drools project also). After that, remover the persistence file into human-task module and rebuild it (tip – manually remove jbpm into your local maven repository. This will avoid lots of problems. Then, create a persistence.xml with this content, and just add the tag <jta-data-source>. Finally, run mvn -o clean install into the project that depends on jbpm. )

July 14, 2011 at 3:01 pm 5 comments

Openshift – Fast Shot

Slides da apresenta√ß√£o que fiz no TDC 2011 sobre Openshift na trilha de Cloud dia 06/07/2011 ūüôā

 

July 7, 2011 at 8:47 am Leave a comment

Seam 3 – criando o projeto

Ol√°, pessoal!

Dando continuidade à série de posts sobre Seam 3, vamos criar um projeto.

[Obs: Esse post presume que você já saiba algo sobre Seam 3. Se você é um absolute beginner, dê uma olhada nesse post, e instale o Maven 3, baixe o Jboss 6 e o Eclipse e configure o path do Jboss] .

Inicialmente, abra o settings.xml do Maven [ele fica na pasta oculta /.m2/settings.xml; se você usa Mac OS estará em /Users/seuUser/.m2/settings.xml. Caso você não tenha um, basta criar com o comando touch settings.xml dentro da pasta .m2 ]. Você precisa adicionar o profile do Jboss public repository. Seu settings.xml deve ficar similar a este:


<settings>

<profiles>

<profile>

<id>jboss-public-repository</id>

<activation>

<property>

<name>jboss-public-repository</name>

<value>!false</value>

</property>

</activation>

<repositories>

<repository>

<id>jboss-public-repository-group</id>

<name>JBoss Public Maven Repository Group</name>

<url>http://repository.jboss.org/nexus/content/groups/public</url>

<releases>

<enabled>true</enabled>

<updatePolicy>never</updatePolicy>

</releases>

<snapshots>

<enabled>false</enabled>

<updatePolicy>never</updatePolicy>

</snapshots>

</repository>

</repositories>

<pluginRepositories>

<pluginRepository>

<id>jboss-public-repository-group</id>

<name>JBoss Public Maven Repository Group</name>

<url>http://repository.jboss.org/nexus/content/groups/public</url>

<releases>

<enabled>true</enabled>

<updatePolicy>never</updatePolicy>

</releases>

<snapshots>

<enabled>false</enabled>

<updatePolicy>never</updatePolicy>

</snapshots>

</pluginRepository>

</pluginRepositories>

</profile>

</profiles>

</settings>

A próxima etapa é criar um novo projeto a partir de um arquétipo Weld. Abra o terminal e rode:

 mvn archetype:generate -DarchetypeArtifactId=jboss-javaee6-webapp -DarchetypeGroupId=org.jboss.weld.archetypes -DarchetypeVersion=1.0.1.CR1 -DarchetypeRepository=central

Mais informa√ß√Ķes sobre arqu√©tipos Weld aqui.

Preencha os campos com os dados de sua aplicação. Para exemplo, foi criada uma aplicação chamada portalacademico [disponibilizei no Github, você pode acessá-la aqui.]

Agora vem a parte mais delicada Рalterar alguma coisas no pom.xml. Como já expliquei em outros posts, o Seam 3 é inteiro feito com Maven. Para usa-lo, você deve adicionar os módulos que deseja em sua aplicação.

Esse post sugere um pom.xml completamente est√°vel. Ele cont√©m diversas depend√™ncias, voc√™ pode remove-las por sua conta e risco ūüôā V√° no diret√≥rio do seu projeto e abra o arquivo pom.xml. ¬†Copie todo o conte√ļdo desde a tag <repositories> at√© o final do arquivo (antes da tag </project> ) deste pom.xml, e substitua no seu arquivo local.

Certiqifque-se que manteve as tags de descrição do pom (<modelVersion>, <articatId>, <properties>, etc) intactas, de acordo com o projeto que você gerou.

Lembrete: Na tag <properties>, na propriedade <jboss.home>, cosumo colcoar o local onde se encontra o Jboss AS 6 hard coded. Se o Maven reclamar, fica a dica para você colcoar hard coded também. No meu caso,  <jboss.home>/usr/local/jboss/jboss-6.0.0.Final/</jboss.home> .

Com o pom.xml correto, v√° ao terminal e rode, na pasta do projeto:

 mvn clean install jboss:hard-deploy 

No pr√≥ximo post vou explorar o projeto utilizando o Eclipse ūüôā

July 2, 2011 at 3:24 pm 3 comments

Older Posts Newer Posts


Categories

  • Blogroll

  • Feeds